package cn.wolfcode.luowowo.mgrsite.job;


import cn.wolfcode.luowowo.article.service.IStrategyDetailService;
import cn.wolfcode.luowowo.article.vo.StrategyStatisPersistenceVO;
import cn.wolfcode.luowowo.cache.domain.StrategyStatisVO;
import cn.wolfcode.luowowo.cache.service.IStrategyStatisRedisService;
import cn.wolfcode.luowowo.cache.util.RedisKeys;
import cn.wolfcode.luowowo.common.util.BeanUtil;
import com.alibaba.dubbo.config.annotation.Reference;
import org.apache.commons.beanutils.BeanUtils;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.lang.reflect.InvocationTargetException;
import java.util.List;

/**
 * 数据持久化任务
 */
//@Component
public class RedisDataPersistenceJob {

    //Cron表达式是一个字符串，字符串以5或6个空格隔开，分为6或7个域，每一个域代表一个含义

    //Seconds Minutes Hours DayofMonth Month DayofWeek   Year
    //  秒     分     时        日        月     周几       年
    //Seconds Minutes Hours DayofMonth Month DayofWeek      [spring支持]
    //  0      0       2       1        *      ?          *   表示在每月的1日的凌晨2点调整任务
    //  0     15      10       ?        *    MON-FRI          表示周一到周五每天上午10:15执行作业

    @Reference
    private IStrategyStatisRedisService strategyStatisRedisService;
    @Reference
    private IStrategyDetailService strategyDetailService;
    //定时任务标签：指定方法在指定时间执行
    //cron 属性: 表示任务计划
    @Scheduled(cron ="0/8 * * * * ?")
    public void doword(){
        System.out.println("---------------持久开始-----------------------");
        //获取redis的数据添加到数据库中
        List<StrategyStatisVO> statisVOS = strategyStatisRedisService.getStrategyStatisVOS(RedisKeys.STRATEGY_STATIS_VO.join("*"));

        for (StrategyStatisVO vo : statisVOS) {
            StrategyStatisPersistenceVO pvo = new StrategyStatisPersistenceVO();
            //工具类设置属性
            BeanUtil.copyProperties(pvo,vo);
            //执行mysql数据中的update操作
            strategyDetailService.updateStatisVO(pvo);
        }
        System.out.println("---------------持久结束-----------------------");

    }
}
